from rest_framework import serializers
from apps.goods.models import SKUImage
from fdfs_client.client import Fdfs_client
# from apps.goods.utils import create_detail_html
from celery_tasks.static_html.tasks import create_detail_html


class SKUImageSerialzier(serializers.ModelSerializer):
    """

    """

    class Meta:
        model = SKUImage
        fields = '__all__'

    # 编写保存业务，完成图片上传操作
    def create(self, validated_data):
        """
            validated_data验证后的数据
        """
        # 1、建立fastDFS链接
        client = Fdfs_client('/Users/august/Desktop/meiduo/meiduo_mall/meiduo_mall/utils/fastdfs/client.conf')
        # 2、获取前端传递的图片数据 validated_data['image'] 提取的数据是文件类型
        image = validated_data['image']
        # 3、使用fastDFS方法上传图片
        res = client.upload_by_buffer(image.read())  # 读取文件二进制数据上传
        # client.upload_by_filename() # 按照文件名上传
        # 4、获取上传的结果进行判断是否上传成功
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('图片上传sh')
        # 5、提取文件的路径
        img_url = res['Remote file_id']
        # 6、将路径保存在图片表
        img = SKUImage.objects.create(sku=validated_data['sku'], image=img_url)
        # 图片变化后需要重新生成新的详情页页面
        # create_detail_html(img.sku_id)
        # create_detail_html(validated_data['sku'].id)
        # 7、返回图片表对象
        return img

    # 编写修改业务，完成图片上传操作
    def update(self, instance, validated_data):
        # 1、建立fastDFS链接
        client = Fdfs_client('/Users/august/Desktop/meiduo/meiduo_mall/meiduo_mall/utils/fastdfs/client.conf')
        # 2、获取前端传递的图片数据 validated_data['image'] 提取的数据是文件类型
        image = validated_data['image']
        # 3、使用fastDFS方法上传图片
        res = client.upload_by_buffer(image.read())  # 读取文件二进制数据上传
        # client.upload_by_filename() # 按照文件名上传
        # 4、获取上传的结果进行判断是否上传成功
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('图片上传sh')
        # 5、提取文件的路径
        img_url = res['Remote file_id']
        # 6、修改图片路径
        instance.sku = validated_data['sku']
        instance.image = img_url
        instance.save()
        # 图片变化后需要重新生成新的详情页页面
        # create_detail_html(instance.sku_id)
        create_detail_html.delay(instance.sku_id)
        # 7、返回图片表对象
        return instance
